package com.learn;

import org.aspectj.lang.annotation.Aspect;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

import com.learn.dao.UserDao;

/**
 * AOP开发流程：
 * 1.引入依赖spring-boot-starter-aop，引入后即默认开启的（@org.springframework.boot.autoconfigure.aop.AopAutoConfiguration）
 * 2.写一个Aspect，封装横切关注点（日志、监控等），需要配置的（前置通知后置通知等）和切入点（哪些包的哪些类的哪些方法）
 * 3.使用@Aspect和@Component
 * 
 * spring.aop.auto配置项决定是否启用AOP,默认启用
 * 
 * 默认使用JDK的动态代理来实现AOP
 * spring.aop.proxy-target-class=false或者不配置表示使用JDK的动态代理
 * =true表示使用cglib
 * 如果使用了false，而类没有接口，则依然使用cglib
 *
 */
@SpringBootApplication
public class App{
    public static void main( String[] args ){
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        context.getBean(UserDao.class).add("admin", "1111");
        context.close();
    }
}
